In order for managed NAND flash memory to work properly, and to provide longevity in the field, the flash controller must be aware of which flash cells are ‘in use’. This “in-use” information is used to allow for wear leveling, and other flash maintenance. The traditional method available to keep the controller informed of unused blocks is to implement a TRIM command on each block, i.e. “trimming” the flash memory. Typically, a TRIM command permits an operating system to tell the flash controller which blocks of data are no longer in use, and can be erased and reused. However, implementing a TRIM command immediately upon deletion can have a significant impact on file system performance. Once a file is deleted, most file systems do not provide a low-impact method of determining which blocks are free, although they are able reuse those blocks at a future opportunity due to internal accounting in the file system. However, since the flash controller is not aware of these “unused” blocks, it is unable to use them for flash maintenance.